Promise.all = function (PromiseArr) {
    let i = 0, result = [] // i用来记录PromiseArr中成功的promise对象，result用来保存promise对象的值
    return new Promise((resolve, reject) => { // all方法会返回一个新的promise对象
        PromiseArr.forEach((item, index) => { // 遍历传入的promise对象数组
            Promise.resolve(item).then(val => { // 利用resolve方法将promise数组中的元素都变为promise
                i++ // 每成功一个就加1
                result[index] = val // 按索引记录值
                if (index === PromiseArr.length) { // 当index等于promise数组长度时，说明全部成功，直接resolve
                    resolve(result)
                }
            }, err => {
                reject(err) // 只要有一个失败，立即失败
            })
        })
    })
}